home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 015 / lq1500pc.arc / LQ1500PC.ASM next >
Assembly Source File  |  1985-11-24  |  12KB  |  407 lines

  1.     TITLE    LQ15OO Printer Setup Utility
  2.     PAGE    60,132
  3.  
  4. ; Written by Rick Schaeffer (70120,174)
  5. ;         E. 2121 Upriver Dr. Apt. 11
  6. ;         Spokane, Wa.  99207
  7. ;
  8. ; Original modified extensively by Bob Lloyd  4/27/1984 to take
  9. ; advantage of Z100 features.
  10. ;
  11. ; Modified for Epson FX-80 commands 15-Apr-85
  12. ;
  13. ;      by Richard W Sheeres
  14. ;         Capitol Heath Users Group
  15. ;         Bolling AFB, Washington DC
  16. ;
  17. ; Modified for Epson LQ1500 commands 21-Nov-85
  18. ; Modified for Z100PC (Z150) 23-Nov-85
  19. ;
  20. ;      by Don M. Deck
  21. ;         P.O. Box 1240
  22. ;         Lone Pine, CA 93545
  23. ;
  24. ; This program provides a means of setting the various print modes on
  25. ; an Epson LQ1500 printer.  With a few exceptions this includes any of
  26. ; the Epson family that supports the graftrax option.  In addition, the
  27. ; program can easily be configured for other types of "intelligent"
  28. ; printers.  Assemble this program with the following commands:
  29. ;
  30. ;    MASM LQ1500,LQ1500;    to create LQ1500.OBJ
  31. ;    LINK LQ1500,LQ1500;    to create LQ1500.EXE
  32. ;    EXE2BIN LQ1500.EXE.COM  to create LQ1500.COM
  33. ;
  34. ; and delete the .OBJ and .EXE files.
  35. ;
  36. ; To have the program print a list of its options, type "LQ1500" (with
  37. ; no parameters).  To invoke an option, type "LQ1500 X" where "X"
  38. ; represents the option you wish to invoke.  You may include any number
  39. ; of options on the same command line and they may be mixed in any
  40. ; fashion.  For example:
  41. ;
  42. ;    LQ1500 RLI
  43. ;
  44. ; The above example will reset all other options (the "R"), set letter
  45. ; quality (the "L"), and set italic style (the "I").
  46. ;
  47. TRUE    EQU    0FFFFH
  48. FALSE    EQU    NOT TRUE
  49. Z100PC    EQU    TRUE            ;ASSEMBLE FOR Z100PC (Z150...)
  50. ;                    ;OTHERWISE ASSEMBLES FOR Z100
  51. ;
  52. ; SOME ASCII CODES
  53. ;
  54. LF    EQU    0AH
  55. FF    EQU    0CH
  56. CR    EQU    0DH
  57. SHFI    EQU    0FH
  58. DC2    EQU    12H
  59. DC4    EQU    14H
  60. CAN    EQU    18H
  61. ESC    EQU    1BH
  62. DEL    EQU    7FH
  63.  
  64. ; ENDING DELIMITERS
  65.  
  66. ENDCON    EQU    0FDH            ;END OF CONSOLE STRING
  67. ENDPRN    EQU    0FEH            ;END OF PRINT STRING
  68. ENDTBL    EQU    0FFH            ;END OF PRINT CODE TABLE
  69.  
  70. ;DOS EQUATES
  71.  
  72. CMDLINE    EQU    80H            ;OFFSET TO COMMAND LINE
  73. DOSEXIT    EQU    20H            ;PROGRAM TERMINATION INTERRUPT
  74. DOSFUNC    EQU    21H            ;DOS FUNCTION REQUEST INTERRUPT
  75. PRTFUNC    EQU    05H            ;PRINT OUTPUT FUNCTION
  76. CONFUNC EQU    02H            ;CONSOLE OUTPUT FUNCTION
  77.  
  78. CODESEG SEGMENT
  79.     ASSUME CS:CODESEG,SS:CODESEG,DS:CODESEG
  80.  
  81.     ORG    100H            ;.COM FILE
  82.  
  83. START:    JMP    BEGIN
  84.  
  85.     IF    Z100PC
  86.  
  87. ; IBM CLEAR SCREEN (SEE PAGE 6.16 PROGRAMMER'S UTILITY PACK)
  88. ;
  89. ;     AH=6     VIDEO I/O SCROLL ACTIVE PAGE UP FUNCTION
  90. ;    AL=0    ERASE ENTIRE WINDOW
  91. ;    CH=0    ROW OF UPPER LEFT-HAND CORNER OF SCROLL
  92. ;    CL=0    COLUMN OF UPPER LEFT-HAND CORNER OF SCROLL
  93. ;    DH=24    ROW OF LOWER RIGHT-HAND CORNER OF SCROLL
  94. ;    DL=79    COLUMN OF LOWER RIGHT-HAND CORNER OF SCROLL
  95. ;    BH=2    ATTRIBUTE BYTE FOR ERASED LINE (GREEN ON BLACK)
  96. ;
  97. CLRSCN: MOV    AX,0600H        ;CLEAR SCREEN (AH=6, AL=0)
  98.     MOV    CX,0            ;ERASE LINES 1-24,COLUMNS 1-80
  99.     MOV    DH,24            ;ROW
  100.     MOV    DL,79            ;COLUMN
  101.     MOV    BH,2            ;GREEN ON BLACK
  102.     INT    10H            ;IBM VIDEO I/O INTERRUPT
  103.  
  104. ; IBM HOME CURSOR (SEE PAGE 6.15 PROGRAMMER'S UTILITY PACK)
  105. ;
  106. ;    AH=2    VIDEO I/O SET CURSOR POSITION FUNCTION
  107. ;    DH=0    ROW    - 0 IS UPPER MOST ROW
  108. ;    DL=0    COLUMN - 0 IS LEFT MOST COLUMN
  109. ;    BH=0    PAGE NUMBER
  110. ;
  111.     MOV    AH,2            ;SET CURSOR POSITION
  112.     MOV    DX,0            ;HOME CURSOR
  113.     MOV    BH,0            ;PAGE
  114.     INT    10H            ;IBM VIDEO I/O INTERRUPT
  115.     RET
  116.  
  117.     ELSE
  118.  
  119. ; Z100 CLEAR SCREEN AND HOME CURSOR
  120. ;
  121. CLRSCN:    MOV    SI,OFFSET CLRMSG    ;POINT TO STRING
  122.     CALL    DSP_STRING        ;WRITE STRING TO CONSOLE
  123. CLRMSG    DB    ESC,'E',ENDCON        ;H19 CLEAR SCREEN/HOME CURSOR
  124.     RET
  125.  
  126.     ENDIF
  127. ;
  128. ; MAIN PROGRAM
  129. ;
  130. BEGIN:  MOV     BX,CMDLINE        ;GET COMMAND LINE OFFSET
  131.         MOV     AL,[BX]            ;GET COMMAND LINE LENGTH
  132.         MOV     BYTE PTR FMATCH,0    ;RESET FOUND MATCH FLAG
  133.     CMP    AL,0            ;IF LENGTH NOT ZERO
  134.     JNZ    PARSECMD        ;PROCESS COMMAND LINE
  135. ;
  136. ;    DISPLAY HELP MESSAGE ON CONSOLE
  137. ;
  138. DSP_HELP:
  139.     CALL    CLRSCN            ;ELSE, CLEAR SCREEN
  140.     MOV    SI,OFFSET HELPMSG    ;POINT TO HELP STRINGS
  141. DSP_STRING:
  142.     MOV    DL,[SI]            ;GET A BYTE
  143.     CMP    DL,ENDCON        ;IS IT END OF STRING?
  144.     JZ    EXIT_DOS        ;YES...TERMINATE PROGRAM
  145.     PUSH    SI            ;SAVE POINTER
  146.     MOV    AH,CONFUNC        ;SETUP CONSOLE FUNCTION
  147.     INT    DOSFUNC            ;DISPLAY CHARACTER
  148.     POP    SI            ;RETRIEVE POINTER
  149.     INC    SI            ;BUMP TO NEXT CHARACTER
  150.     JMP    DSP_STRING        ;LOOP FOR NEXT CHARACTER
  151. ;
  152. ; PARSE COMMAND LINE AND CHECK EACH PRINTER CODE AGAINST TABLE. IF
  153. ; FOUND, SEND CONTROL CODE STRING TO PRINTER, OTHERWISE SKIP TO NEXT
  154. ; COMMAND LINE ENTRY.  IF ALL ENTRIES ON COMMAND LINE ARE NOT IN THE
  155. ; TABLE, DISPLAY THE HELP MESSAGE.
  156. ;
  157. PARSECMD:
  158.         CMP     AL,0            ;IF LENGTH ZERO
  159.         JZ      CHK_FMATCH        ;CHECK FOR COMMAND LINE MATCH
  160.         INC     BX            ;BUMP TO NEXT CHARACTER
  161.         DEC     AL            ;DECREMENT COUNT
  162.         MOV     AH,[BX]            ;GET COMMAND LINE CHARACTER
  163.         CMP     AH,'a'             ;COMPARE TO 'a'
  164.         JL      CHK_TABLE        ;IF NOT LOWERCASE LETTER
  165.         CMP     AH,'z'            ;COMPARE TO 'z'
  166.         JG      CHK_TABLE        ;IF NOT LOWERCASE LETTER
  167.         AND     AH,0DFH            ;ELSE CONVERT TO UPPER CASE
  168.  
  169. ; CHECK TABLE FOR CODE FROM COMMAND LINE
  170.  
  171. CHK_TABLE:
  172.         PUSH    BX            ;SAVE COMMAND LINE INDEX
  173.         PUSH    AX            ;SAVE LENGTH
  174.         CALL    FIND_CODE        ;FIND CODE & SEND TO PRINTER
  175.         POP     AX            ;RETRIEVE COUNT
  176.         POP     BX            ;AND POINTER
  177.         JMP     PARSECMD        ;LOOP BACK FOR MORE
  178. ;
  179. ; IF COMMAND LINE CONTAINED CODE(S), FMATCH WILL BE SET TO 1
  180. ; AND PROGRAM TERMINATES.  OTHERWISE, FMATCH WILL BE SET TO 0
  181. ; AND HELPMSG IS DISPLAYED.
  182. ;
  183. CHK_FMATCH:
  184.         CMP     BYTE PTR FMATCH,0    ;DID WE GET A MATCH?
  185.         JNZ     EXIT_DOS        ;YES...JUST EXIT
  186.     JMP    DSP_HELP        ;NO...DISPLAY HELP SCREEN
  187.  
  188. ; EXIT TO MSDOS
  189.  
  190. EXIT_DOS:
  191.     INT    DOSEXIT            ;TERMINATE PROGRAM
  192. ;
  193. ; LOCATE THE COMMAND CODE IN TABLE & SEND TO PRINTER
  194. ;
  195. FIND_CODE:
  196.     MOV    SI,OFFSET LQ_TABLE    ;POINT AT TABLE
  197. FC_LOOP:
  198.     CMP    BYTE PTR [SI],ENDTBL    ;AT END OF TABLE?
  199.     JZ    PRT_EXIT        ;YES...EXIT FIND_CODE
  200.     CMP    [SI],AH            ;MATCH?
  201.     JZ    PRT_CODE        ;YES...SEND CODE TO PRINTER
  202. SKIP:                    ;NO, LOOP TO END OF ENTRY
  203.     INC    SI            ;BUMP TO NEXT CHARACTER
  204.     CMP    BYTE PTR [SI],ENDPRN    ;END OF ENTRY?
  205.         JNZ     SKIP            ;NOPE
  206.         INC     SI            ;YES...BUMP TO NEXT TABLE ENTRY
  207.         JMP     FC_LOOP            ;AND CHECK FOR MATCH
  208. ;
  209. ; SEND CONTROL CODE STRING TO PRINTER
  210. ;
  211. PRT_CODE:
  212.     MOV    BYTE PTR FMATCH,1    ;SET FOUND MATCH FLAG
  213.     INC    SI            ;BUMP PAST COMMAND CHARACTER
  214. PC_LOOP:
  215.     MOV    DL,[SI]            ;GET A BYTE
  216.     CMP    DL,ENDPRN        ;IS IT END OF STRING?
  217.     JZ    PRT_EXIT        ;YES...EXIT PRT_CODE
  218.     PUSH    SI            ;SAVE POINTER
  219.     MOV    AH,PRTFUNC        ;SETUP PRINT FUNCTION
  220.     INT    DOSFUNC            ;DO PRINT
  221.     POP    SI            ;RETRIEVE POINTER
  222.     INC    SI            ;BUMP TO NEXT CHAR
  223.     JMP    PC_LOOP            ;LOOP FOR NEXT CHAR
  224. PRT_EXIT:
  225.     RET
  226.  
  227.     PAGE
  228. ;
  229. ; DATA AND TABLE DEFINITIONS
  230. ;
  231. FMATCH: DB    0            ;FOUND MATCH FLAG
  232. ;
  233. HELPMSG    DB    '    Epson LQ1500 Print Mode Selections '
  234.     DB    'Ver 1.0 by Don M. Deck',CR,LF,CR,LF
  235.     DB    '    R - Reset to TOP of form, DRAFT Quality, '
  236.     DB    'PICA (10 cpi) Style, 6 LPI',CR,LF,CR,LF
  237.     DB    '    QUALITY                                  '
  238.     DB    'LPI',CR,LF
  239.     DB    '    -------                                  '
  240.     DB    '---',CR,LF
  241.     DB    '    L - Letter                               '
  242.     DB    '8 - 8 Lines per inch',CR,LF
  243.     DB    '                                             '
  244.     DB    CR,LF
  245.     DB    '    STYLE                                    '
  246.     DB    'MISCELLANEOUS',CR,LF
  247.     DB    '    -----                                    '
  248.     DB    '-------------',CR,LF
  249.     DB    '    E - Elite (12 cpi)                       '
  250.     DB    'F - Form feed (top of form)',CR,LF
  251.     DB    '    P - Proportional (overrides pica/elite)  '
  252.     DB    'V - Line feed',CR,LF
  253.     DB    '    I - Italic                               '
  254.     DB    '/ - Carriage Return',CR,LF
  255.     DB    '    J - Justified (full)                     '
  256.     DB    'B - Buffer clear',CR,LF
  257.     DB    '    C - Condensed (draft quality only)       '
  258.     DB    'H - Half speed',CR,LF
  259.     DB    '    X - Expanded                             '
  260.     DB    'O - Paper out sensor OFF',CR,LF
  261.     DB    '    M - Emphasized                           '
  262.     DB    'T - Unidirectional',CR,LF
  263.     DB    '    D - Doublestrike                         '
  264.     DB    'Y - High order bit ON',CR,LF
  265.     DB    '    U - Underline                            '
  266.     DB    'Z - High order bit OFF',CR,LF
  267.     DB    '    S - Small                                '
  268.     DB    CR,LF
  269.     DB    '    A - APR mode                             '
  270.     DB    CR,LF,CR,LF
  271.     DB    '    USAGE: LQ1500 P1[P2..Pn] where Pn is '
  272.     DB    'from above menu.',ENDCON
  273.  
  274.     PAGE
  275. ;
  276. ; LQ1500 Print Function Table
  277. ;
  278. ; The following is the table which controls this program.  It can
  279. ; easily be modified to support other options and/or other types of
  280. ; printers.  Each option is also shown in the HELP MESSAGE screen.
  281. ;
  282. ; In the table, each option consists of two elements:
  283. ;   1.  The letter or number which invokes the option.  The program
  284. ;    will automatically convert lower case letters to upper case
  285. ;    at run time so be sure to only use upper case letters here.
  286. ;
  287. ;   2.  The string of characters to be sent to the printer to turn
  288. ;    on the selected option(s).  This can be any set of characters
  289. ;    and *MUST* be ended with "ENDPRN".
  290. ;
  291. ; Note that both elements must be present in each table entry.  A null
  292. ; table entry would consist of the command letter/number followed by
  293. ; "ENDPRN".
  294. ;
  295. ; The table must be ended with "ENDTBL".
  296. ;
  297. ; (Earlier versions of this program included a third element which
  298. ; consisted of a string of characters to be sent to the console display
  299. ; to inform the user what action had been taken or to be displayed if
  300. ; the user invoked the program with no parameters or with an
  301. ; unimplemented parameter.  This string ended with "CR,LF,ENDCON".
  302. ; These strings have been relocated to a Help Screen and removed from
  303. ; the table.  The display code has been modified accordingly.)
  304. ;
  305. ; (Earlier versions also included codes to both turn ON a printer mode
  306. ; and to turn OFF the same printer mode.  For the most part, the OFF
  307. ; entry has been removed.  Use the R - Reset command to clear the
  308. ; printer to power-up configuration and set new modes.  The Reset
  309. ; command is prefixed by a form feed to make sure that when Reset
  310. ; re-initializes top of form, that the paper is properly positioned.
  311. ; This can be removed if you prefer to manually enter a form feed or
  312. ; adjust the paper.)
  313. ;
  314. LQ_TABLE LABEL BYTE
  315. ;
  316.     DB    '/'            ;Carriage Return
  317.     DB    CR,ENDPRN
  318. ;
  319. ;    0 thru 7 not used
  320. ;
  321.     DB    '8'            ;8 lines per inch
  322.     DB    ESC,'0',ENDPRN
  323. ;
  324. ;    9 not used
  325. ;
  326.     DB    'A'            ;APR mode
  327.     DB    ESC,'M',ESC,'3',34,ENDPRN
  328. ;
  329.     DB    'B'            ;Buffer clear
  330.     DB    CAN,ESC,DEL,ENDPRN
  331. ;
  332.     DB    'C'            ;Condensed on
  333.     DB    ESC,SHFI,ENDPRN        ;use reset to turn off
  334. ;
  335.     DB    'D'            ;Doublestrike
  336.     DB    ESC,'G',ENDPRN        ;use reset to turn off
  337. ;
  338.     DB    'E'            ;Elite (12 cpi)
  339.     DB    ESC,'M',ENDPRN        ;use reset to set pica
  340. ;
  341.     DB    'F'            ;Form feed (top of form)
  342.     DB    FF,ENDPRN
  343. ;
  344. ;    DB    'G'            ;not used
  345. ;    DB    ENDPRN
  346. ;
  347.     DB    'H'            ;Half speed on
  348.     DB    ESC,'s',1,ENDPRN    ;use reset for full speed on
  349. ;
  350.     DB    'I'            ;Italics
  351.     DB    ESC,'4',ENDPRN        ;use reset for standard
  352. ;
  353.     DB    'J'            ;Justification (full) on
  354.     DB    ESC,'a',3,ENDPRN    ;use reset to turn off
  355. ;
  356. ;    DB    'K'            ;not used
  357. ;    DB    ENDPRN
  358. ;
  359.     DB    'L'            ;Letter quality
  360.     DB    ESC,'x',1,ENDPRN
  361. ;
  362.     DB    'M'            ;Emphasized on
  363.     DB    ESC,'E',ENDPRN        ;use reset to turn off
  364. ;
  365. ;    DB    'N'            ;not used
  366. ;    DB    ENDPRN
  367. ;
  368.     DB    'O'            ;Paper out sensor off
  369.     DB    ESC,'8',ENDPRN        ;use reset to turn on
  370. ;
  371.     DB    'P'            ;Proportional quality
  372.     DB    ESC,'p',1,ENDPRN    ;use reset to turn off
  373. ;
  374. ;    DB    'Q'            ;not used
  375. ;    DB    ENDPRN
  376. ;
  377.     DB    'R'            ;Reset printer & top of form
  378.     DB    ESC,'@',ENDPRN
  379. ;
  380.     DB    'S'            ;Small print
  381.     DB    ESC,SHFI,ESC,'S',1,ESC,'3',17,ENDPRN
  382. ;
  383.     DB    'T'            ;Unidirectional on
  384.     DB    ESC,'U',1,ENDPRN    ;use reset for bidirectional on
  385. ;
  386.     DB    'U'            ;Underline on
  387.     DB    ESC,'-',1,ENDPRN    ;use reset to turn off
  388. ;
  389.     DB    'V'            ;Line feed
  390.     DB    LF,ENDPRN
  391. ;
  392. ;    DB    'W'            ;not used
  393. ;    DB    ENDPRN
  394. ;
  395.     DB    'X'            ;Expanded (Enlarged) on
  396.     DB    ESC,'W',1,ENDPRN    ;use reset to turn off
  397. ;
  398.     DB    'Y'            ;High order bit on
  399.     DB    ESC,'>',ENDPRN
  400. ;
  401.     DB    'Z'            ;High order bit off
  402.     DB    ESC,'=',ENDPRN
  403. ;
  404.     DB    ENDTBL
  405. CODESEG    ENDS
  406.     END    START
  407.